import org.junit.jupiter.api.Test;

import java.security.PublicKey;
import java.util.Arrays;

/**
 * 数组 Array
 * 数组相当于一堆相同数据类型的数据；
 *
 *
 */


public class 数组 {
    //1.数组定义：4组 创建数组初始化【静态初始化：给定值 动态初始化：无给定值】
   // @Test
    //public void testArray(){
    //注意：数组长度固定  不能改变
        //int[] arr1=new int[4];//Java推荐写法  动态初始化
        //int arr2[]=new int[4];//c推荐写法 Java兼容 动态初始化
       // int[] arr3={1,2,3};//静态初始化数组  元素可以直接使用
       // int[] arr4=new int[]{1,2,3};//动态初始化数组
        //数组：内部存的数据叫做元素
        //从arr3里面取出2的元素  数组名 下标
       // System.out.println(arr3[1]);
        //以arr3的长度
      //  System.out.println(arr3.length);
        //从arr4获取到 第四个元素值 数组下标越界异常 下标超出数组长度范围
        //System.out.println(arr4[4]);//报错
 //   }
    /**
     * 数组的迭代（遍历：输出数组所有元素值）三种
     * 1.普通迭代方式：for
     * 2.增强for的方式：推荐，JDK1.5之后
     * 3.工具表：Arrays
     */
    @Test
    public void testTterate(){
        int[] arr={1,2,3,4};//静态初始化数组   数组名【下标】
   //     for(int i=0;i<arr.length;i++){//拿下标
   //        System.out.println(arr[i]);
   //     }
        //增强for jdk1.5
   //     for(int j:arr){//增强for语法：（遍历数据类型 引用：数组名）
   //         System.out.println(j);
   //     }
        //工具类：Arrays.toString（）直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }
    /**
     * 数组扩容：数组长度是固定，不可改变【可以使用扩容改变数组长度】
     */
  @Test
    public void tesetCopy(){
      //字符数组，数组长度固定：2个
      char[] arr={'唐','山'};//想法长度增加4
      //扩容：增加四个     克隆新的数组
     char[] temp= Arrays.copyOf(arr,4);
      arr=temp;
      arr[2]='工';
      arr[3]='业';
      System.out.println(arr);
      //需求：输出唐山工业
  }
    /**
     * 数组输出元素时，会有一些不同【查看数据是否是数组】
     * 数据类型：基础数据类型+引用类型
     *
     */
    @Test
    public void testArrays(){
        //字符数组
        char[] china={'中','国'};
        System.out.println(china);//输出：中国   字符串
        //输出语句--JavaOOP面向对象：重载，字符数组自动拼接
        //数据数组
        int[] i={1,2};
        System.out.println(i);//输出：[数据类型@ 连接符 3d812c5f3地址值
    }
    /**
     * 冒号排序：双层for循环使用；外层for执行一次，执行全部
     */
    @Test
    public void bubblSort(){
        //静态初始化数组
        int[] arr={3,6,4,1};//1,3,4,6
       //①外层for
       for(int i=0;i<arr.length-1;i++) {
           //②内部for控制次 j=3轮递减-[3-1]次
           for(int j=0;j<arr.length-1-i;j++){
               //③交换：第一个元素比第二个元素大 条件成立：交换【升序】
               if (arr[j]>arr[j+1]) {// 【相邻元素】  数组名[下标]
                   //创建第三方数组，接收  变量名：temp
                   int temp=arr[j];//大元素交给第三方变量保存
                   arr[j]=arr[j+1];//第二个元素换给第一个元素位置
                   arr[j+1]=temp;  //保存的第三方变量 【大数】 交给第二个元素

               }


           }
       }
        System.out.println(Arrays.toString(arr));//输出类型
    }
    @Test
    public void testSort(){
        int[] arr={3,6,4,1};
        //工具类 Arrays.sort()方法排序，默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
